"""
安装 poppler-utils
sudo apt-get install poppler-utils
安装依赖
pip install paddleocr pdf2image
pip install paddlepaddle==2.5.2
"""

from flask import Flask, request, jsonify
import base64
from pdf2image import convert_from_bytes
from paddleocr import PaddleOCR
import numpy as np

ocr = PaddleOCR(use_angle_cls=True, lang='ch')
# ocr = PaddleOCR(use_angle_cls=True, lang='ch', det_model_dir='./ch_PP-OCRv4_det_infer', rec_model_dir='./ch_PP-OCRv4_rec_infer')

app = Flask(__name__)

@app.route('/GetTextFromPdf', methods=['POST'])
def GetTextFromPdf():
    # 获取请求中的 JSON 数据
    data = request.get_json()
    if 'pdf_base64' not in data:
        return jsonify({"error": "Missing 'pdf_base64' in request body."}), 400
    # 解码 Base64 编码的 PDF
    pdf_base64 = data['pdf_base64']
    try:
        pdf_bytes = base64.b64decode(pdf_base64)
    except base64.binascii.Error:
        return jsonify({"error": "Invalid Base64 encoding."}), 400
    # 将 PDF 转换为图像
    images = convert_from_bytes(pdf_bytes)
    # OCR 识别每页图像
    extracted_texts = []
    for image in images:
        image = np.array(image)
        # ocr_result = ocr.ocr(image, det=False, rec=True) # 仅进行文字识别，不进行文本检测
        ocr_result = ocr.ocr(image, det=True, rec=True) # 进行完整的 OCR 处理，包括文本检测（找出文本区域）和文本识别（提取文本内容）。
        # print(ocr_result)
        page_text = "".join([line[1][0] for line in ocr_result[0]])
        extracted_texts.append(page_text)
    # 返回提取的文本
    return jsonify({"text": "".join(extracted_texts)})

if __name__ == '__main__':
    app.run(debug=True)
